home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume2 / kernel / dirk.1 next >
Text File  |  1988-12-28  |  37KB  |  892 lines

  1. Path: xanth!nic.MR.NET!csd4.milw.wisc.edu!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v02i099:  dirk - system resource monitor
  5. Message-ID: <10928@swan.ulowell.edu>
  6. Date: 28 Dec 88 17:12:27 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 881
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: elbaum%REED.BITNET@CUNYVM.CUNY.EDU (Daniel Elbaum)
  12. Posting-number: Volume 2, Issue 99
  13. Archive-name: kernel/dirk.1
  14.  
  15. This is dirk, a program which presents system resource information
  16. intuitively and windowlessly.  The color of your screen background and
  17. foreground are periodically adjusted according to the proportion of
  18. free memory in the system and the number of ready tasks which are
  19. waiting.  Detach it using run or arun, and relax.
  20.  
  21. [uuencode executable here; it's small.  ..Bob]
  22.  
  23. #    This is a shell archive.
  24. #    Remove everything above and including the cut line.
  25. #    Then run the rest of the file through sh.
  26. #----cut here-----cut here-----cut here-----cut here----#
  27. #!/bin/sh
  28. # shar:    Shell Archiver
  29. #    Run the following text with /bin/sh to create:
  30. #    dirk.c
  31. #    dirk.doc
  32. #    dirk.uu
  33. # This archive created: Wed Dec 28 12:07:50 1988
  34. cat << \SHAR_EOF > dirk.c
  35.  
  36. /*
  37.     9/88
  38.  
  39.     DIRK v0.01 -- Tune workbench colors to system performance
  40.  
  41.     Copyright (C) 1988 by Daniel Elbaum
  42.  
  43.     This software is freely redistributable provided:
  44.     the three files which comprise it (dirk, dirk.c, dirk.doc)
  45.     remain intact; that all copyright notices contained in
  46.     any of the aforementioned files remain intact; and that
  47.     no fee beyond reasonable remuneration for collation and
  48.     distribution be charged for use and/or distribution.
  49.  
  50. */
  51.  
  52.  
  53. #include <exec/types.h>
  54. #include <exec/exec.h>
  55. #include <exec/execbase.h>
  56. #include <intuition/intuition.h>
  57.  
  58. #define IREV    (1)
  59. #define GREV    (1)
  60. #define CMAX    (15)    /* max val for color component (hardware)   */
  61.  
  62. /*
  63.     seems odd, but really makes sense, since background
  64.     has 2 color components, and detail has 3.
  65.     These limits are to ensure enough contrast for readability.
  66. */
  67.  
  68. struct g_flags {
  69.     int gran;   /* granularity of mapping from #tasks to pen brightness */
  70.     int bsmax;  /* constant total saturation of background (red+blue)   */
  71.     int dsmax;  /* maximum detail brightness (if high, text glares)     */
  72.     int dsmin;  /* darkest gray for detail pen                          */
  73.     int dstog;  /* set to activate task watch                           */
  74.     int bstog;  /* set to activate memory watch                         */
  75.     int intvl;  /* number of ticks between updates                      */
  76.     int bd_r;   /* base detail pen red component                        */
  77.     int bd_g;   /* base detail pen green component                      */
  78.     int bd_b;   /* base detail pen blue component                       */
  79. }   g_f;    /* initialized in getargs() */
  80.  
  81.  
  82. typedef struct IntuitionBase *  t_ib;
  83. typedef struct GfxBase * t_gb;
  84.  
  85. t_ib IntuitionBase;
  86. t_gb GfxBase;
  87.  
  88. extern struct ExecBase *SysBase;
  89.  
  90. struct IntuiMessage *GetMsg();
  91. void *OpenLibrary();
  92. ULONG AvailMem();
  93.  
  94. main(c, v)
  95. char **v;
  96. {
  97.     register i, active=1;
  98.     register  ULONG tm;
  99.     ULONG fu1, fu2;
  100.     register struct Screen *sp;
  101.     register struct Window *wp;
  102.     register struct IntuiMessage *msg=NULL;
  103.     struct Window *getwin();
  104.     ULONG totmem();
  105.  
  106.     if (getargs(++v, &g_f)<0) exit(10);
  107.  
  108.     if (!(IntuitionBase=(t_ib)OpenLibrary("intuition.library", IREV)))
  109.         exit(99);
  110.     if (!(GfxBase=(t_gb)OpenLibrary("graphics.library", GREV))){
  111.         CloseLibrary(IntuitionBase);
  112.         exit(98);
  113.     }
  114.     if (!(sp=IntuitionBase->FirstScreen)){
  115.         CloseLibrary(IntuitionBase);
  116.         CloseLibrary(GfxBase);
  117.         exit(20);
  118.     }
  119.     for (; sp; sp=sp->NextScreen)
  120.         if (!strcmp(sp->Title, "Workbench Screen"))
  121.             break;
  122.     if (!sp) {
  123.         CloseLibrary(IntuitionBase);
  124.         CloseLibrary(GfxBase);
  125.         exit(22);
  126.     }
  127.     if (!(wp=getwin())) exit(FALSE);
  128.     if (g_f.bstog) tm=totmem();
  129.     for (;;) {
  130.         if (!msg) msg=GetMsg(wp->UserPort);
  131.         if (msg){
  132.             ReplyMsg(msg);
  133.             if (msg->Class==ACTIVEWINDOW)
  134.                 active=1;
  135.             if (msg->Class==INACTIVEWINDOW)
  136.                 active=0;
  137.             if (msg->Class==CLOSEWINDOW){
  138.                 CloseWindow(wp);
  139.                 CloseLibrary(IntuitionBase);
  140.                 CloseLibrary(GfxBase);
  141.                 exit(0);
  142.             }
  143.             msg=NULL;
  144.         }
  145.         if (active)
  146.             WaitTOF();
  147.         else{
  148.             for (i=0; i<g_f.intvl; ++i)
  149.                 if (msg=GetMsg(wp->UserPort)) break;
  150.                 else WaitTOF();
  151.         }
  152.         setcolor(sp, tm);
  153.     }
  154.     /* NOTREACHED   */
  155. }
  156.  
  157. setcolor(sp, tm)
  158. register struct Screen *sp;
  159. ULONG tm;
  160. {
  161.     register f, db, t;
  162.     int tr, tw;
  163.     int r, g, b;
  164.     ULONG mu, fm;
  165.     ULONG amtfree();
  166.  
  167.     if (g_f.dstog){
  168.         tqlen(&tr, &tw);
  169.  
  170.         f=CMAX-(tr+tw)/g_f.gran;
  171.         if (f<g_f.dsmin) f=g_f.dsmin;
  172.         if (f>g_f.dsmax) f=g_f.dsmax;
  173.         if ((t=tr/g_f.gran+f)>CMAX) t=CMAX;
  174.     }
  175.  
  176.     if (g_f.bstog){
  177.         fm=amtfree();
  178.         mu=tm-fm;
  179.         db=(mu*g_f.bsmax)/tm;
  180.     }
  181.  
  182.     /* Detail and Block pens seem to be reversed    */
  183.  
  184.     if ((r=t+g_f.bd_r)>CMAX) r=CMAX;
  185.     if ((g=t+g_f.bd_g)>CMAX) g=CMAX;
  186.     if ((b=t+g_f.bd_b)>CMAX) b=CMAX;
  187.     Forbid();
  188.     if (g_f.dstog) SetRGB4(sp->ViewPort, sp->BlockPen, r, g, b);
  189.     if (g_f.bstog) SetRGB4(sp->ViewPort, sp->DetailPen, db, 0, g_f.bsmax-db);
  190.     Permit();
  191. }
  192.  
  193. /*
  194.     Find the total amount of system memory
  195.     by cruising the master list.
  196. */
  197.  
  198. ULONG
  199. totmem()
  200. {
  201.     register ULONG tu, tl, tm=0;
  202.     register struct Node *n;
  203.     register struct MemHeader *m;
  204.  
  205.     Disable();
  206.     for (n=SysBase->MemList.lh_Head; n->ln_Succ; n=n->ln_Succ){
  207.         m=(struct MemHeader *)n;
  208.         tu=(ULONG)m->mh_Upper;
  209.         tl=(ULONG)m->mh_Lower;
  210.         tm+=tu-tl;
  211.     }
  212.     Enable();
  213.     return(tm);
  214. }
  215.  
  216. /*
  217.     Hunt up all ready tasks and waiting tasks;
  218.     put their respective counts in r and w.
  219. */
  220.  
  221. tqlen(r, w)
  222. int *r, *w;
  223. {
  224.     register tr=0, tw=0;
  225.     register struct Task *t;
  226.  
  227.     Disable();
  228.     t=SysBase->TaskReady.lh_Head;
  229.     for (tr=0; t->tc_Node.ln_Succ; t=t->tc_Node.ln_Succ)
  230.         tr++;
  231.     t=SysBase->TaskWait.lh_Head;
  232.     for (tw=0; t->tc_Node.ln_Succ; t=t->tc_Node.ln_Succ)
  233.         tw++;
  234.     Enable();
  235.     *r=tr;
  236.     *w=tw;
  237.     return(tr+tw);
  238. }
  239.  
  240. /*
  241.     Place amt of free chip mem into cm;
  242.     place amt of free fast mem into fm.
  243. */
  244.  
  245. ULONG
  246. amtfree()
  247. {
  248.     ULONG c, f;
  249.  
  250.     Forbid();
  251.     c=AvailMem(MEMF_CHIP);
  252.     f=AvailMem(MEMF_FAST);
  253.     Permit();
  254.     return(c+f);
  255. }
  256.  
  257. /*
  258.     Just give me a window and don't make me
  259.     put endless initializations into main()
  260.     or global space, okay?
  261. */
  262.  
  263. #define MINWD   (120)
  264. #define MINHT   (10)
  265. #define MAXWD   MINWD
  266. #define MAXHT   MINHT
  267.  
  268. struct Window *
  269. getwin()
  270. {
  271.     struct NewWindow nw;
  272.     struct Window *Window;
  273.  
  274.     nw.LeftEdge = 640/2-MAXWD/2;
  275.     nw.TopEdge = 0;
  276.     nw.Width = MAXWD;
  277.     nw.Height = MAXHT;
  278.     nw.DetailPen = 0;
  279.     nw.BlockPen = 1;
  280.     nw.Flags = WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|BORDERLESS;
  281.     nw.IDCMPFlags = CLOSEWINDOW|ACTIVEWINDOW|INACTIVEWINDOW;
  282.     nw.FirstGadget = NULL;
  283.     nw.CheckMark = NULL;
  284.     nw.Title="Dirk";
  285.     nw.Type=WBENCHSCREEN;
  286.     nw.Screen = NULL;
  287.     nw.BitMap = NULL;
  288.     nw.MinWidth = MINWD;
  289.     nw.MinHeight = MINHT;
  290.     nw.MaxWidth = MAXWD;
  291.     nw.MaxHeight = MAXHT;
  292.     if (!(Window = OpenWindow(&nw))) {
  293.         printf("can't open window");
  294.         return((struct Window *)NULL);
  295.     }
  296.     else return(Window);
  297. }
  298.  
  299. getargs(v, f)
  300. char **v;
  301. struct g_flags *f;
  302. {
  303.     register out=0;
  304.  
  305.     f->gran  = 4;      /*  good when 4-5 processes are in background   */
  306.     f->bsmax = 14;     /*  good background--nor too bright nor dark    */
  307.     f->dsmax = 12;     /*  takes some glare out of text                */
  308.     f->dsmin = 8;      /*  readable even at near-red                   */
  309.     f->dstog = 1;      /*  task watcher on by default                  */
  310.     f->bstog = 1;      /*  memory watcher on by default                */
  311.     f->intvl = 180;    /*  default delay is 3 seconds                  */
  312.     f->bd_r  = 0;      /*  increment for detail pen red                */
  313.     f->bd_g  = 0;      /*  increment for detail pen green              */
  314.     f->bd_b  = 0;      /*  increment for detail pen blue               */
  315.  
  316.     while (*v){
  317.         if (**v=='-') {
  318.             if (!(*v)[1]) return(usage());
  319.             while (*++*v){
  320.                 switch(**v){
  321.                     case 'g': f->gran=atoi(++*v); ++out; break;
  322.                     case 'b': f->bsmax=atoi(++*v); ++out; break;
  323.                     case 'h': f->dsmax=atoi(++*v); ++out; break;
  324.                     case 'l': f->dsmin=atoi(++*v); ++out; break;
  325.                     case 'i': f->intvl=atoi(++*v); ++out; break;
  326.                     case 't': f->bstog=0; break;
  327.                     case 'm': f->dstog=0; break;
  328.                     default: return(usage());
  329.                 }                               /* switch (**v) */
  330.                 if (out) {++v; break;}
  331.             }                               /* while (*(++*v))  */
  332.             if (!out) ++v;
  333.             else out=0;
  334.         }                               /* if (**v=='-')    */
  335.         else if (**v=='+') {
  336.             if (!(*v)[1]) return(usage());
  337.             while (*++*v){
  338.                 switch(**v){
  339.                     case 'r': f->bd_r=atoi(++*v); ++out; break;
  340.                     case 'g': f->bd_g=atoi(++*v); ++out; break;
  341.                     case 'b': f->bd_b=atoi(++*v); ++out; break;
  342.                     default: return(usage());
  343.                 }                               /* switch (**v) */
  344.                 if (out) {++v; break;}
  345.             }                               /* while (*++*v)  */
  346.             if (!out) ++v;
  347.             else out=0;
  348.         }                               /* else if (**v=='+')   */
  349.         else {
  350.             return(usage());
  351.         }
  352.     }                               /* while (*v)   */
  353.     limit(f);
  354.     if (f->gran==0) f->gran=1;  /* special case for x/gran  */
  355.     return(0);
  356. }
  357.  
  358. #define LFIX(x, l)   if (x<l) x=l
  359. #define HFIX(x, h)   if (x>h) x=h
  360.  
  361. /*
  362.     Make sure all members of *f are in bounds.
  363. */
  364.  
  365. limit(f)
  366. struct g_flags *f;
  367. {
  368.     int maxint=(1<<sizeof(maxint))-1;
  369.  
  370.  
  371.     LFIX(f->gran, 0);
  372.     HFIX(f->gran, maxint);
  373.     LFIX(f->bsmax, 0);
  374.     HFIX(f->bsmax, CMAX);
  375.     LFIX(f->dsmax, 0);
  376.     HFIX(f->dsmax, CMAX);
  377.     LFIX(f->dsmin, 0);
  378.     HFIX(f->dsmin, CMAX);
  379.     LFIX(f->intvl, 0);
  380.     HFIX(f->intvl, maxint);
  381.  
  382.     LFIX(f->bd_r, 0);
  383.     HFIX(f->bd_r, CMAX);
  384.     LFIX(f->bd_g, 0);
  385.     HFIX(f->bd_g, CMAX);
  386.     LFIX(f->bd_b, 0);
  387.     HFIX(f->bd_b, CMAX);
  388. }
  389.  
  390. usage()
  391. {
  392.     printf("dirk v0.01 copyright (c) 1988 Daniel Elbaum/Amaranth Software\n");
  393.     printf("\nUsage: dirk [-t|m] [-gN] [-bN] [-hN] [-lN] [-iN]]\n");
  394.     printf("t\ttrack tasks only\n");
  395.     printf("m\ttrack memory only\n");
  396.     printf("g   (4)\tgranularity of task mapping (small for few tasks)\n");
  397.     printf("b  (14)\tbackground saturation\n");
  398.     printf("h  (12)\tmaximum detail saturation\n");
  399.     printf("l   (8)\tminimum detail saturation\n");
  400.     printf("i (180)\tinterval in ticks (60 or 50 per second)\n");
  401.     printf("\n\t[+rN] [+gN] [+bN]\n");
  402.     printf("r   (0)\tamount by which to redden the pen\n");
  403.     printf("g   (0)\tamount by which to greeen the pen\n");
  404.     printf("b   (0)\tamount by which to bluen the pen\n");
  405.     printf("\n");
  406.     return(-1);
  407. }
  408.  
  409.  
  410. SHAR_EOF
  411. cat << \SHAR_EOF > dirk.doc
  412.  
  413.     9/88
  414.  
  415.  
  416.     DIRK v0.01 -- Tune workbench colors to system performance
  417.  
  418.                          -----------------
  419.  
  420.                    Copyright (C) 1988 by Daniel Elbaum
  421.  
  422.          This software is freely redistributable provided that:
  423.          the three files which comprise it (dirk, dirk.c, dirk.doc)
  424.          remain intact; all copyright notices contained in any of
  425.          the aforementioned files remain intact; and no fee beyond
  426.          reasonable remuneration for collation and distribution be
  427.          charged for use and/or purveyance.
  428.  
  429.  
  430.                          -----------------
  431.  
  432. Syntax:
  433.     run dirk [-t|m] [-gN] [-bN] [-hN] [-lN] [-iN]] [+rN] [+gN] [+bN]
  434.  
  435. Parameters:
  436.  
  437.     Option   Default    Effect
  438.     ---------------------------------------------------------------------
  439.     -
  440.         t               track tasks only
  441.         m               track memory only
  442.         g        4      granularity of task mapping (small for few tasks)
  443.         b       14      background saturation
  444.         h       12      maximum detail saturation
  445.         l        8      minimum detail saturation
  446.         i      180      interval in ticks (60 or 50 per second)
  447.  
  448.     +
  449.         r        8      base value for red component of detail pen
  450.         g        8      base value for green component of detail pen
  451.         b        8      base value for blue component of detail pen
  452.  
  453.  
  454.     If you like the program, you may eventually want to start it from
  455.     your startup-sequence, so you might want to dirk around with
  456.     the options before deciding on a command line to use. Here
  457.     they are.
  458.  
  459.     The -t option enables task tracking only.  The background color
  460.     is not affected.
  461.  
  462.     The -m option complements the -t option; only memory tracking is
  463.     turned on.  The detail pen color is not affected.
  464.  
  465.     The following command line options require counts.  The valid
  466.     range of the count varies from option to option.  All color
  467.     counts should be between 0 and 15; other counts must be
  468.     between 0 and 65535.
  469.  
  470.     Granularity, set with -gN, is the sensitivity with which detail
  471.     pen color responds to the instantaneous number of ready tasks.
  472.     Workable values lie between 1 and 8.
  473.  
  474.     The background saturation argument, -bN, determines the brightness
  475.     of the screen, which remains constant as hue varies.  N is best
  476.     set between 4 and 14.
  477.  
  478.     Maximum detail saturation (-hN) is a limit on the brightness of
  479.     the detail pen.  A value of 8 to 14 (14 brighter) can keep
  480.     detail from glaring.  The valid range is 0-15.
  481.  
  482.     Minimum detail saturation, -lN (ell not one) is a floor on the
  483.     brightness of the pen, to maintain good contrast to the
  484.     background.  For a light background, l should be at least 8.
  485.  
  486.     The interval (-iN) is the number of ticks to wait between
  487.     data retrieval expeditions.  A tick is 1/60th of a second
  488.     in the US, and 1/50 in Europe.  If N is given as 0, the
  489.     research and reporting are done constantly, and system
  490.     performance slows slightly but noticeably.  180 corresponds
  491.     to ~3 seconds, and is probably a good functional maximum.
  492.  
  493.     The + arguments specify the detail pen's basic color.
  494.     As the number of tasks increases, the pen becomes dimmer,
  495.     and as the proportion of active tasks increases, the pen
  496.     becomes yellower.  -rN sets the red component (0-15),
  497.     -gN sets the green, and -bN sets the blue.  It's worth
  498.     experimenting to find a combination which provides good
  499.     contrast.
  500.  
  501.     It all sounds confusing but once you run the program
  502.     and see what it does, the meaning of the command line
  503.     options will hopefully fall into place.
  504.  
  505.                          -----------------
  506. Description:
  507.  
  508.     The purpose of this program is to present key system
  509.     information to the user without cluttering up the display.
  510.     The workbench background color changes from blue through
  511.     purple to red as the amount of free memory decreases.
  512.     The workbench detail color (the color of text and Workbench
  513.     window borders) changes from bright white to gray as the
  514.     number of system tasks increases.  Further, the yellow
  515.     content of this color is increased according to the number
  516.     of active tasks.
  517.  
  518.     On a newly-booted vanilla system, borders are white and the
  519.     background is close to the standard Workbench blue.  As
  520.     you use the system, calling up programs and creating files
  521.     on the RAMdisk, the screen takes on an increasingly reddish
  522.     hue.  When memory is nearly full, the background is completely
  523.     red.
  524.  
  525.     Similarly, as tasks are added, the borders dim slightly.
  526.     In other words, after you set up dmouse, conman, snipit,
  527.     or whatever to run in the background, the detail color
  528.     fades, eventually to grey.  If many background tasks are
  529.     active rather than just waiting around for an interrupt or
  530.     message, the grey will be tinted yellow.
  531.  
  532.     With dirk running in the background, you always have a rough
  533.     idea of how much memory is available and how busy the system
  534.     is, without hunting around for the window of your favorite
  535.     resource-tracking gizmo.
  536.  
  537.                          -----------------
  538.  
  539. Signature and self-promo:
  540.  
  541.     If you want to send me money for dirk, then by all means
  542.     do so--many projects are in progress and I need financing.
  543.     $5.00 is recommended.  Make checks payable to:
  544.  
  545.     Daniel Elbaum
  546.     Amaranth Software
  547.     4816 SE Bybee Blvd.
  548.     Portland, Ore. 97206
  549.  
  550.  
  551.     Send comments, suggestions, and flames to:
  552.  
  553.     Daniel Elbaum
  554.     Portland bbs: Amigaboard!, NAG
  555.     UUCP: ...!tektronix!reed!elbaum
  556.     ARPA: elbaum@reed.EDU
  557.  
  558.  
  559.  
  560.  
  561. SHAR_EOF
  562. cat << \SHAR_EOF > dirk.uu
  563.  
  564. begin 644 dirk
  565. M```#\P`````````'``````````8````"```"10``"54````6````-@````P`"
  566. M```*```#Z0````).^0```````````^P````!`````@````(````````#\@``H
  567. M`^H```)%`"$``0``````````````````````````____________________'
  568. M____________````````````````````````````````````````````````W
  569. M`````````````````````````````````````````````````````````````
  570. M`````````````````````````````````````````````````````````````
  571. M`````````````````````````````````````````````````````````````
  572. M`````````````````````````````````````````````````````````````
  573. M`````````````````````````````````````````````````````````````
  574. M`````````````````````````````````````````````````````````````
  575. M`````````````````````````````````````````````````````````````
  576. M`````````````````````````````````````````````````````````````
  577. M`````````````````````````````````````````````````````````````
  578. M````````````'-X`````````````````````````````````````````````Z
  579. M`````````````````````````````````````````````````````````````
  580. M`````````````````````````````````````````````````````````````
  581. M`````````````````````````````````````````````````````````````
  582. M`````````````````````````````````````````````````````````````
  583. M`````````````````````````````````````````````````````````````
  584. M`````````````````````````````````````````````````````````````
  585. M`````````````````````````````````````````````````````````````
  586. M`````````````````````````````````````````````````````````````
  587. M`````````````````````````````````````````````````````````````
  588. M`````````````````````````````````````````````````````````````
  589. M`````````````````````````````````````````````````````````````
  590. M`````````````````````````````````````````````````````````````
  591. M`````````````````````````````````````````````````````````````
  592. M`````````````````````````````````````````````````````````````
  593. M`````````````````````````````````````````````````````````````
  594. M`````````````````````````````````````````````````````````````
  595. M`````````````````````````````````````````````````````````````
  596. M`````````````````````````````````````````````````````````````
  597. M`````````````````````````````````````````````````````````````
  598. M`````````````````````````````````````````````````````````````
  599. M`````````````````````````````````````````````````````````````
  600. M`````````````````````````````````````````````````````````````
  601. M`````````````````````````````````````````````````````````````
  602. M`````````````````````````````````````````````````````````````
  603. M``````````````````````````````````````````````````!M871H:65E=
  604. M961O=6)B87,N;&EB<F%R>0``````````````````````````````````````H
  605. M`````````````````````````````````````````````````````````````
  606. M`````````````````````````````````````````````````````````````
  607. M`````````````````````````````````````````````````````````````
  608. M`````````````````````````````````````````````````````````````
  609. M`````````````````````````````````````````````````````````````
  610. M`````````````````````````````````````````````````````````````
  611. M`````````````````````````````````````````````````````````````
  612. M`````````````````````````````````````````````````````````````
  613. M`````````````````````````````````````````````````````````````
  614. M`````````````````````````````````````````````````````````````
  615. M`````````````````````````````````````````````````````````````
  616. M`````````````````````````````````````````````````````````````
  617. M`````````````````````````````````````````````````````````````
  618. M``````````````````````````````````````````````````/L`````0``P
  619. M``(```'P`````````_(```/I```)52//````,"/`````."/(````/"QY````[
  620. M!"/.````!)/)3J[^VBA`2JP`K&<``0AA``(RD<@@+`"LY8@@,`@0Y8A(YP`PJ
  621. M1?D```#`1_D```!`($!P`!`80C`(`";((#D````X('D````\0_`(``PA`"!2>
  622. MR/_Z0BD``1(89UP,`0`@9_8,`0`)9_`FR@P!`")G%!3!$AAG0@P!`"!G!!3!`
  623. M8/)"&F#4$AAG,`P!`")G\@P!`"IF(!(8#`$`3F<&#`$`;F8$<@I@#@P!`$5GB
  624. M!@P!`&5F`G(;%,%@S$(20I,@/````#R0BT:`Y(A,WPP`2'D```!`+P!.N0``J
  625. M`!PCP````!@CP````"1.N0```"PCP````!PCP````"`CP````"@CP````"Q.[
  626. MN0``']QP`"YY````,$YU80`!+&$``18CP````#0O`$*G)$`@*@`D9Q`L>0``A
  627. M``@@0"(H``!.KO^"0?D```:,#!```&=0(@@D/````^TL>0````A.KO_B#(``>
  628. M````9T0CP````!@CP````!PCP````"`CP````"0CP````"@CP````"PI0`"<.
  629. M*4``H.6(($`I:``(`*1.N0``']QP`&`$("\`!$JY````-&<2(CD````8:PHL`
  630. M>0````A.KO_<+GD````P+P`L>0````0@.0````AG!B)`3J[^8B`Y````#&<&E
  631. M(D!.KOYB(#D````09P8B0$ZN_F)*N0```#1G#DZN_WPB>0```#1.KOZ&(!].1
  632. M=4CG`08N/``#@`<L>``$3J[_E$S?8(!P9&``_WI![`!<3J[^@$'L`%Q.KOZ,@
  633. M3G5#^@`2<`!.KOW8(\`````(9\!.=61O<RYL:6)R87)Y`$YQ3E;_X$CG'SQ%B
  634. M^0```*Q'^0``(%I)^0```>@Z?``4?`%V`$AY```!P%BN``PO+@`,3KD```?0B
  635. M4$]*@&P```I(>``*3I-83TAX``%(>0``#KY.N0```,!03RB`(!1F```*2'@`Q
  636. M8TZ36$](>``!2'D```ZL3KD```#`4$\CP````>P@.0```>QF```0+Q1.DEA/C
  637. M2'@`8DZ36$\@5"@H`#QF```8+Q1.DEA/+SD```'L3I)83R\-3I-83TJ$9P``'
  638. M)DAY```.FB!$+R@`%DZY```A6%!/2H!F```&8```""!$*!!@UDJ$9@``&B\4`
  639. M3I)83R\Y```![$Z26$](>``63I-83TZY```&\"H`9@``"$*G3I-83T'Y```!"
  640. MP-'-(!!G```,3KD```8`+4#_]$J#9@``$B!%+R@`5DZY````A%A/)@!*@V<`1
  641. M`%PO`TZY````F%A/(#4X``R```0``&8```1\`2`U.``,@``(``!F```$?``@_
  642. M-3@`#(````(`9@``(B\%3KD`````6$\O%$Z26$\O.0```>Q.DEA/0J=.DUA/\
  643. M=@!*AF<```Q.N0````!@```T?@!!^0```<"^J``8;```)"!%+R@`5DZY````T
  644. MA%A/)@!G```&8```#$ZY`````%*'8-`O+O_T+P1.N0``!(!03V``_SA,WSSX=
  645. M3EY.=4Y6_]A(YQ\\1?D```'`*BX`""`J`!!G``!F2&[_[$AN__!.N0``!DQ0I
  646. M3W`/(B[_\-*N_^PO$B\!3KD``"->(A]83Y"!)@"VJ@`,;```!B8J``RVJ@`(R
  647. M;P``!B8J``@O$B\N__!.N0``(UX@'UA/T(,H``R$````#V\```1X#R`J`!1GA
  648. M``!$3KD```:T*D!P`"`N``QR`"(-D($M0/_<0?D```'`+R@`!"\N_]Q.N0``(
  649. M(NP@'UA/+RX`#"\`3KD``"->(!]83RA`(`30J@`<)D`@"PR`````#V\```8VS
  650. M?``/(`30J@`@+@`,AP````]O```$?@\@!-"J`"0L``R&````#V\```1\#TZYM
  651. M````("`J`!!G```H+P8O!R\+($40*`%+<@`2`"\`(`4&@````"PO`$ZY````7
  652. M$-[\`!0@*@`49P``,"`J``0B#)"!+P!"IR\,($40*`%*<@`2`"\`(`4&@```9
  653. M`"PO`$ZY````$-[\`!1.N0```#!,WSSX3EY.=4Y6_^Q(YQ\`>@!.N0`````@C
  654. M>0````0F*`%"($,@$&<``!PH`R!$+B@`&"!$+"@`%"`'D(;:@"!#)A!@WDZYB
  655. M````$"`%3-\`^$Y>3G5.5O_T2.<<`'H`>`!.N0`````@>0````0F*`&6>@`@^
  656. M0R`09P``"E*%($,F$&#P('D````$)B@!I'@`($,@$&<```I2A"!#)A!@\$ZYV
  657. M````$"!N``@@A2!N``P@A"`%T(1,WP`X3EY.=4Y6__A(YQ@`3KD````@2'@`=
  658. M`DZY````<%A/*`!(>``$3KD```!P6$\F`$ZY````,"`$T(-,WP`83EY.=4Y64
  659. M_\PO`SU\`03_T$'N_]!":``"0>[_T#%\`'@`!$'N_]`Q?``*``9![O_00B@`^
  660. M"$'N_]`1?``!``E![O_0(7P```@.``Y![O_0(7P`#`(```I![O_00J@`$D'NX
  661. M_]!"J``60?D```Z40^[_T"-(`!I![O_0,7P``0`N0>[_T$*H`!Y![O_00J@`X
  662. M(D'N_]`Q?`!X`"9![O_0,7P`"@`H0>[_T#%\`'@`*D'N_]`Q?``*`"Q(;O_0[
  663. M3KD````46$\F`&8``!A(>0``#H).N0``&\!83W``)A].7DYU(`-@]F#T3E;_4
  664. M_$CG'#`F+@`,*"X`"$7Y```.T$?Y```+U'H`($,@O`````0@0R%\````#@`$_
  665. M($,A?`````P`""!#(7P````(``P@0R%\`````0`0($,A?`````$`%"!#(7P`.
  666. M``"T`!@@0T*H`!P@0T*H`"`@0T*H`"0@1"`09P`"+"!$(%`0$`P``"UF``%.>
  667. M($0@4!`H``%F```,3I-,WPPX3EY.=2!$4I`@4!`09P`!&B!$(%`0$$B`2,`,F
  668. M@````&)M``#P!(````!B#(`````2;@``X.6`0?D```BN(G`(`$[1```)$@``Z
  669. M"7X```E^```)?@``"7X```C^```)*```"50```E^```)?@``"3X```ET```)+
  670. M?@``"7X```E^```)?@``"7X```E^```):@`````@1%*0+Q!.DEA/($,@@%*%Z
  671. M8```="!$4I`O$$Z26$\@0R%```12A6```%X@1%*0+Q!.DEA/($,A0``(4H5@,
  672. M``!(($12D"\03I)83R!#(4``#%*%8```,B!$4I`O$$Z26$\@0R%``!A2A6``L
  673. M`!P@0T*H`!1@```2($-"J``08```"$Z38`#^YDJ%9P``"%B$8```!F``_MY*?
  674. MA68```A8A&````1Z`&```,X@1"!0$!`,```K9@``NB!$(%`0*``!9@``"$Z3"
  675. M8`#^I"!$4I`@4!`09P``BB!$(%`0$$B`2,!.N0``))0```H"````<@``"A@`L
  676. M``!G```*+@```&(````````*1"!$4I`O$$Z26$\@0R%``!Q2A6```#0@1%*0L
  677. M+Q!.DEA/($,A0``@4H5@```>($12D"\03I)83R!#(4``)%*%8```"$Z38`#^Q
  678. M($J%9P``"%B$8```!F``_VY*A68```A8A&````1Z`&````A.DV``_?A@`/W0O
  679. M+P-.N0``"I983R!#(!!F```*($,@O`````%P`&``_=1.5O_\2.<8/"8N``@T6
  680. M?``D-GP`(#A\`!PZ?``8>`\@0R`0;```!B!#0I`@0R`0L(1O```&($,@A"!#W
  681. M("@`!&P```@@0T*H``0@0R`H``0,@`````]O```,($,A?`````\`!"!#("@`4
  682. M"&P```@@0T*H``@@0R`H``@,@`````]O```,($,A?`````\`""!#("@`#&P`4
  683. M``@@0T*H``P@0R`H``P,@`````]O```,($,A?`````\`#"`U.`!L```&0K4XW
  684. M`"`U.`"PA&\```8KA#@`(#0X`&P```9"M#@`(#0X``R`````#V\```HIO```.
  685. M``\X`"`S.`!L```&0K,X`"`S.``,@`````]O```*)[P````/.``@,C@`;```P
  686. M!D*R.``@,C@`#(`````/;P``"B6\````#S@`3-\\&$Y>3G5.5@``+PI%^0``!
  687. M&\!(>0``#D).DEA/2'D```X.3I)83TAY```-^DZ26$](>0``#>1.DEA/2'D`@
  688. M``VH3I)83TAY```-B$Z26$](>0``#61.DEA/2'D```U`3I)83TAY```-#DZ2C
  689. M6$](>0``#/A.DEA/2'D```S,3I)83TAY```,H$Z26$](>0``#'9.DEA/2'D`2
  690. M``QT3I)83W#_)%].7DYU"@!B("`@*#`I"6%M;W5N="!B>2!W:&EC:"!T;R!B%
  691. M;'5E;B!T:&4@<&5N"@!G("`@*#`I"6%M;W5N="!B>2!W:&EC:"!T;R!G<F5E;
  692. M96X@=&AE('!E;@H``'(@("`H,"D)86UO=6YT(&)Y('=H:6-H('1O(')E9&1EF
  693. M;B!T:&4@<&5N"@``"@E;*W).72!;*V=.72!;*V).70H``&D@*#$X,"D):6YTN
  694. M97)V86P@:6X@=&EC:W,@*#8P(&]R(#4P('!E<B!S96-O;F0I"@``;"`@("@XE
  695. M*0EM:6YI;75M(&1E=&%I;"!S871U<F%T:6]N"@``:"`@*#$R*0EM87AI;75M8
  696. M(&1E=&%I;"!S871U<F%T:6]N"@``8B`@*#$T*0EB86-K9W)O=6YD('-A='5R7
  697. M871I;VX*``!G("`@*#0I"6=R86YU;&%R:71Y(&]F('1A<VL@;6%P<&EN9R`H(
  698. M<VUA;&P@9F]R(&9E=R!T87-K<RD*``!M"71R86-K(&UE;6]R>2!O;FQY"@``+
  699. M=`ET<F%C:R!T87-K<R!O;FQY"@`*57-A9V4Z(&1I<FL@6RUT?&U=(%LM9TY=C
  700. M(%LM8DY=(%LM:$Y=(%LM;$Y=(%LM:4Y=70H`9&ER:R!V,"XP,2!C;W!Y<FEGN
  701. M:'0@*&,I(#$Y.#@@1&%N:65L($5L8F%U;2]!;6%R86YT:"!3;V9T=V%R90H`=
  702. M`&-A;B=T(&]P96X@=VEN9&]W`$1I<FL``%=O<FMB96YC:"!38W)E96X``&=R=
  703. M87!H:6-S+FQI8G)A<GD``&EN='5I=&EO;BYL:6)R87)Y`$Y6__A(YQP`)BX`;
  704. M"'H`*`4@0Q`0#```(&8```92@V#P($,0$`P``"UF```&4H-Z`2!#$!`,```PF
  705. M;0``+"!#$!`,```Y;@``('#0(@32@20!Y8+2@B!#4H,4$$B"2,+2@M"!*`!@E
  706. MRDJ%9P``"B`$1(!@```$(`1,WP`X3EY.=4YQ3E;_]$CG'P`F+@`(*BX`#$'YJ
  707. M```%]"`(!H````!_*``@1$(0#(.`````9@``6"`%3KD``"24```/I@````@`R
  708. M``^V````"@``#\`````0````````#\I!^0``'-(@"$S?`/A.7DYU0?D``!S&%
  709. M(`A@[D'Y```<O"`(8.1!^0``'+0@"&#:2H-L```(<`%@```$0H`N`&<```@@U
  710. M`T2`)@`O!2\#3KD``"/^(!]83RP`+P4O`TZY```C7B`?6$\F`"!Y```!\-'&H
  711. M4X0B1!*02H-NSDJ'9P``"E.$($00O``M(`1@`/]\3E;_R$CG'P`J+@`0#(4`/
  712. M```@;P``!'H&0?D``!RL0^X`""`I```B*0`$3KD``!^*2H!L```(<`%@```$I
  713. M0H`N`&<``"!![@`(("@``"(H``1.N0``'WI![@`((4```"%!``1![@`(+R@`P
  714. M!"\H``!.N0``'0103T'N_]@A0```(4$`!$'N_]A#[@`(("D``"(I``1.N0``-
  715. M'V)![O_@(4```"%!``1!^0``!?0F"'P`O(5L``".0?D``!RD0^[_X"`I```BC
  716. M*0`$3KD``!\:0>[_X"%````A00`$0>[_X"\H``0O*```3KD``!T$4$\O`2``9
  717. M(A].N0``'\(H``8``#`@0U*#$(`@!$ZY```?LD'N_^`O`2\`("@``"(H``0M[
  718. M7__(+5__S$'N_\A.N0``'V)![O_@(4```"%!``12AF``_W`@0U*#0A!P/T'YJ
  719. M```%]"(()`5$@M*"T($F`$AY```%]"\#3KD``"&`4$]3@R!#$+P`+D'Y```<9
  720. MG$/N_]@@*0``(BD`!$ZY```?,B\!+P!.N0``'0103T'N_]`A0```(4$`!$'YY
  721. M```<E$/N_]`@*0``(BD`!$ZY```?&D'N_]@O`2\`("@``"(H``0M7__(+5__A
  722. MS$'N_\A.N0``'V(O`2``(A].N0``'\(H``8``#!3@R!#$(!![O_00^[_V"-H[
  723. M`````"-H``0`!$'Y```<C$/N_]@@*0``(BD`!$ZY```?BDJ`;@#_3DJ'9P``"
  724. M"E.#($,0O``M(`-,WP#X3EY.=4Y6_\A(YQ\@+BX`$`R'````(&\```1^!D'Y:
  725. M```<A$/N``@@*0``(BD`!$ZY```?BDJ`;```"'`!8```!$*`)$`@"F<``"!!,
  726. M[@`(("@``"(H``1.N0``'WI![@`((4```"%!``1X`$'Y```<?$/N``@@*0``V
  727. M(BD`!$ZY```?BDJ`9P``CD'Y```<=$/N``@@*0``(BD`!$ZY```?BDJ`;0```
  728. M*D'Y```<;$/N``@@*0``(BD`!$ZY```?,D'N``@A0```(4$`!%*$8+I!^0``]
  729. M'&1#[@`(("D``"(I``1.N0``'XI*@&P``"I!^0``'%Q#[@`(("D``"(I``1.R
  730. MN0``'QI![@`((4```"%!``13A&"Z0>X`""\H``0O*```3KD``!T$4$]![O_87
  731. M(4```"%!``1![O_80^X`""`I```B*0`$3KD``!]B0>[_X"%````A00`$0?D`U
  732. M``7T)@AZ`+J';```CD'Y```<5$/N_^`@*0``(BD`!$ZY```?&D'N_^`A0```=
  733. M(4$`!$'N_^`O*``$+R@``$ZY```=!%!/+P$@`"(?3KD``!_"+``&```P($-2]
  734. M@Q"`(`9.N0``'[)![O_@+P$O`"`H```B*``$+5__R"U?_\Q![O_(3KD``!]B\
  735. M0>[_X"%````A00`$4H5@`/]P($-2@Q"\`$5*A&T```X@0U*#$+P`*V```!`@,
  736. M0U*#$+P`+2`$1(`H`'H"2H5M```R2'@`"B\$3KD``"/^(!]83RP`!@``,"!#;
  737. MT<40@$AX``HO!$ZY```C7B@?6$]3A6#*($-"*``#<#E!^0``!?0B""0'1(+2T
  738. M@M"!)@!(>0``!?0O`TZY```A@%!/4X,@0Q"\`"Y!^0``'$Q#[O_8("D``"(I=
  739. M``1.N0``'S(O`2\`3KD``!T$4$]![O_0(4```"%!``1!^0``'$1#[O_0("D`J
  740. M`"(I``1.N0``'QI![O_8+P$O`"`H```B*``$+5__R"U?_\Q![O_(3KD``!]BR
  741. M+P$@`"(?3KD``!_"+``&```P4X,@0Q"`0>[_T$/N_]@C:``````C:``$``1!)
  742. M^0``'#Q#[O_8("D``"(I``1.N0``'XI*@&X`_TX@"F<```I3@R!#$+P`+2`#6
  743. M3-\$^$Y>3G5.5O_T2.<8`"@N`!!!^0``'#1#[@`(("D``"(I``1.N0``'XI*O
  744. M@&P``!A![@`(("@``"(H``1.N0``'WI@```.0>X`""`H```B*``$0>[_]"%`O
  745. M```A00`$0?D``!PL0^[_]"`I```B*0`$3KD``!^*2H!N```@0?D``!PD0^[_6
  746. M]"`I```B*0`$3KD``!^*2H!L```B+P1![@`(+R@`!"\H``!.N0``$G+>_``,A
  747. M3-\`&$Y>3G4O!$'N``@O*``$+R@``$ZY```0--[\``PF`"\#2'D```7T3KD`8
  748. M`"&`4$]*A&\``"Q!^0``!?0F""!#$!!G```&4H-@]%.#($,0$`P``#!F```*H
  749. M($-3@T(08.Q!^0``!?0@"&"43E;_^$CG'``J+@`(>`!!^0``!?0F"$'Y```%$
  750. M]"8(($40$&<``!`@15*%(D-2@Q*04H1@ZKBN``QL```0("X`$"!#4H,0@%*$`
  751. M8.H@0T(00?D```7T(`A,WP`X3EY.=4Y6__A(YQP`*"X`""\$3KD``"&46$\JP
  752. M`$'Y```%]"8((`52A;"N``QL```.("X`$"!#4H,0@&#H+P0O`TZY```A@%!/;
  753. M0?D```7T(`A,WP`X3EY.=4Y6``!(YQP`)BX`""@N``PJ+@`02H1O```8+P4OZ
  754. M!"\#3KD``!<TWOP`#"8`8```'DJ$;```&"\%(`1$@"\`+P-.N0``%M;>_``,Z
  755. M)@`@`TS?`#A.7DYU3E;_UDCG'SPF;@`02_D```]0*"X`#"8N``@@0Q`09P`#0
  756. M2B!#$!!(@$C`3KD``"24```8'@```"4````````;.E*#-'P``"P\```$`"!#@
  757. M$!`,```M9@``"'`!8```!$*`+4#_]"`N__1G```$4H,@0Q`02(!(P"A`(`P,R
  758. M@````#!G```&.'P`("!#$!`,```J9@``#E*#($0D4%B$8```.B!#$!`,```P`
  759. M;0``+B!#$!`,```Y;@``(B`*T(`B`.6!T($@0Q(02(%(P="!!(`````P)$!28
  760. M@V#(("[_]&<```@@"D2`)$`@0Q`0#```+F8``%92@R!#$!`,```J9@``#E*#]
  761. M($0L$%B$8```/'P`($,0$`P``#!M```N($,0$`P``#EN```B(`;0@"(`Y8'04
  762. M@2!#$A!(@4C!T($$@````#`L`%*#8,@@0Q`02(!(P$ZY```DE```&9H````EP
  763. M```9L@```&,``!G.````9```&>(```!E```:!@```&8``!HJ````9P``&DX`R
  764. M``!L```:5````&\``!IH````<P``&H````!U```:E````'@``!K>````6```#
  765. M`````!KR'7P`)?_60>[_UD(H``%![O_6*@A@``%*($0@$!U`_]9![O_60B@`C
  766. M`4'N_]8J"%B$8``!+DAX``H@1"\03I503RH`6(1@``$:+P8@1"\H``0O*```=
  767. M3KD``!)RWOP`#"H`4(0L/```!`!@``#V+P8@1"\H``0O*```3KD``!`TWOP`A
  768. M#"H`4(0L/```!`!@``#2+P8@1"\H``0O*```3KD``!6^WOP`#"H`4(0L/```9
  769. M!`!@``"N4H-@`/[22'@`""!$+Q!.E5!/*@!8A&```)0@1"H06(1*A68```I!X
  770. M^0``'!PJ"&```'Q(>``*($0O$$Z54$\J`%B$8```:$AX`!`@1"\03I503RH`;
  771. M+@4@1Q`09P``+B!'$!`,``!!;0``'B!'$!`,``!:;@``$B!'$!!(@$C`!@``X
  772. M("!'$(!2AV#,6(1@```>2'@`$"!$+Q!.E5!/*@!8A&````I!^0``'!0J""\%K
  773. M3KD``"&46$^PAF\```@@1='&0A`O#"\*+P5.N0``%XC>_``,*@`@11`09P``H
  774. M#B!%4H4B2U)+$I!@[&````H@0R)+4DL2D%*#8`#\LD(33-\\^$Y>3G5.5@``E
  775. M+P,F+@`(+P-(;@`0+RX`#$ZY```7WM[\``P@`R8?3EY.=4Y6__PO`T'Y```!T
  776. M]"8(+P-(;@`0+RX`#$ZY```7WM[\``PO+@`(+P-.N0``(9183R\`2'@``2\#!
  777. M3KD``!W<WOP`$"8?3EY.=4Y6__PO`T'Y```!]"8(+P-(;@`,+RX`"$ZY```7#
  778. MWM[\``Q!^0``!I`@"`:`````("\`+P-.N0``(9183R\`2'@``2\#3KD``!W<(
  779. MWOP`$"8?3EY.=2U/3U!3+0``*&YU;&PI```[QYRA#))"*T05KQUXM8Q`````M
  780. M`````````````````$`D````````0"0```````!`)````````$`D````````0
  781. M/_````````!`)````````$`D````````````````````````````````````W
  782. M````0"0```````!`)````````$`D```````````````````M3T]04RT``#@PO
  783. M,#`P,#`P```M,C$T-S0X,S8T.``R,#`P,#`P,#`P,``P,3(S-#4V-S@Y04)#!
  784. M1$5&1TA)2DM,34Y/4%%24U155E=865H``$Y6__Q![@`(("@``"(H``1.N0``,
  785. M'\(M0/_\("[__$ZY```?LDY>3G5.5O_X0>X`""\H``0O*```3KD``!T$4$]!E
  786. M[O_X(4```"%!``1![O_X0^X`""`I```B*0`$3KD``!^*2H!L```>0?D``!W20
  787. M0^[_^"`I```B*0`$3KD``!]*3EY.=4'N__@@*```(B@`!&#N8.Q.5@``0?D`3
  788. M`!W*0^X`""`I```B*0`$3KD``!]*+P$O`$ZY```=!%!/3KD``!^R3EY.=3_@T
  789. M````````/_````````!.<4Y6__1(YQ\@)BX`%"XN``@D;@`,?``O"B\N`!!.-
  790. MN0``(NP@'UA/*@`@0R`H``P@0Y"H``2PA6P``!(@0R`H``P@0Y"H``1@```$:
  791. M(`4H`"\$($,@*``:($/0J``$+P`O!TZY```A.-[\``S<A)J$WH0@0]FH`!0@'
  792. M0]FH``0@0R`H``@@0["H``1L```,($,B0R-H``0`""!#`"@``0`82H5G```F1
  793. M+P-.N0``(D!83R@`#(3_____9@``#"`$3-\$^$Y>3G5@```&8```!F``_UHO6
  794. M`TZY```B0%A/+PHO!DZY```C7B`?6$]@TDYQ2.?`P"`Y````#&8``#Y#^0``4
  795. M!G1P`"QY````!$ZN_=@CP`````QF```B2.<!!BX\``.`!2QX``1.KO^43-]@%
  796. M@$AX`&1.N0``(%HL0$S?`P-.=4CG,`).N0``'LA,V``,3J[_LDS?0`Q.=4CG9
  797. M,`).N0``'LA,V``,3J[_K$S?0`Q.=4CG,`).N0``'LA,V``,3J[_ODS?0`Q.L
  798. M=4CG,`).N0``'LA,V``,3J[_N$S?0`Q.=2\.3KD``![(3J[_Q"Q?3G5(YS`"X
  799. M3KD``![(3-@`#$ZN_]9,WT`,2H!F!'``8`AK!'`!8`)P_TYU+PY.N0``'LA.=
  800. MKO_<+%].=2\.3KD``![(3J[_XBQ?3G5"@4YU0H%.=4YQ3E8``"\*1?D``"&H;
  801. M0KD```D02'@"@$AY```&D$ZY```B)%!/2'@!`"\Y````&$*G3I+>_``,2'@!*
  802. M`"\Y````'$AX``%.DM[\``Q(>`$`+SD````@2'@``DZ2WOP`#"\N``PO+@`(J
  803. M3KD```*$4$]"ITZY```@6EA/)%].7DYU3E;__$CG$#!%^0``"1!'^0``(-1(0
  804. M>0``!I!.DUA/0?D```:0(`@&@````"`O`$Z36$]!^0``!I`@"`:`````0"\`9
  805. M3I-83R`29P``&B!2)A`@4B\H``@O$DZY````6%!/)(-@XB\N``A.N0```<18E
  806. M3TS?#`A.7DYU3G%.5O_\2.<8`"8N``@O`TZY```B0%A/0J<@0R`H`!0@0Y"H#
  807. M`!`O`"!#*!`O!$ZY````/-[\``P@0R\H``P@0R\H`!I.N0```%A03TAX`"`O=
  808. M`TZY```B)%!/(`1,WP`83EY.=4YQ3E8``"\N`!`O+@`(+RX`#$ZY```DV-[\`
  809. M``Q.7DYU3G$@;P`$(F\`"!`1L!AF```*2AEF]$*`3G42$4B!2,$0($B`2,"0&
  810. M@4YU(&\`!")O``@0V6;\("\`!$YU3G$@;P`$2AAF_)'O``13B"`(3G5.<4Y64
  811. M__Q(YQ@`*"X`$&8```1X`4'Y```&D"`((BX`".N!T($F`&<``%)"IR!#(40`H
  812. M#"\H``Q.N0```$!03R!#(4``&B`H`!IG```P0J="IR!#(*X`#"\03KD````\]
  813. MWOP`#"!#(4``%")#(V@`%``0(`-,WP`83EY.=7``8/1.5@``+RX`#$*G+RX`^
  814. M"$ZY```DJ-[\``Q.7DYU3E;_]$CG'B`F+@`(-'P`$'P`($,0*``82(!(P`*`1
  815. M`````6<``'(@0R`H`!0@0Y"H``0J`"`R.`"PA6<``!I"IR`%D+(X`"\`($,OK
  816. M$$ZY````/-[\``P@0R\H``0@0R\H`!H@0R\03KD`````WOP`#"@`($.XJ``$)
  817. M9P``#'S_2H1L```$>``@!="$)8`X`"!#`BC__@`8($-"J``(($-"J``$(`9,T
  818. MWP1X3EY.=4Y6``!(Y_@`2FX`"&8``!Y*;@`,9@``%C`N``K`[@`.+4``"$S?=
  819. M`!].7DYU>`$D+@`(;```!D2"1(0F+@`,;```!D2#1(1"@#`"P,,R`DA"Q,-(&
  820. M0\+#TH)(04)!T(%*A&P```1$@"U```A,WP`?3EY.=4Y6```O`$IN``QF'"`N0
  821. M``AK%H#N``YI$`*```#__RU```@@'TY>3G5(YWP`>@$@+@`(;`1$@$2%)@`BB
  822. M+@`,;`1$@42%*`$,@0`!``!L%$)`2$"`P30`,`.`P4A`,`)(0&`JXHCBB0R!0
  823. M``$``&ST@,$"@```__\D`"\`+P1A`/\0(!]83[:`;`)3@B`"2H5L`D2`+4``'
  824. M"$S?`#X@'TY>3G5.5@``2.?X`$IN``QF'"`N``AK%H#N``YI$$)`2$`M0``([
  825. M3-\`'TY>3G5X`2`N``AL!$2`1(0D`"(N``QL`D2!#($``0``;!!"0$A`@,$P\
  826. M`H#!0D!(0&`L)@'BB.*)#($``0``;/2`P0*```#__R\`+P-A`/YZ(!]83[2`8
  827. M9`*0@Y""1(!*A&P"1(`M0``(3-\`'TY>3G4@7R)8(@EG!K"89O9.T2!03M!.M
  828. M<4Y6__1(YQX`*BX`""P%*"X`#"8N`!!*@V\```P@1E*&$(13@V#P(`5,WP!XT
  829. M3EY.=4Y6__1(YQ\`+"X`$"XN``A*AFX```P@!TS?`/A.7DYU*BX`#"@'NH1ND
  830. M```X(`93@"(%TH`@`;"$;0``*"`&4X#:@"`&4X#8@"8&2H-O```0($53A2)$3
  831. M4X02D%.#8.Q@```8)@9*@V\``!`@15*%(D12A!*04X-@["`'8)P```/L````9
  832. M4P````$``"&\```@+```(!@``"`&```?]```('```"!Z```@C@``'^H``"!D3
  833. M```>S@``'NH``![8```;Y```#V(``!`0```0V@``$7X``!&0```3Q@``%,H`+
  834. M`!3<```6D```%J0``!;.```6Y@``%NX``!<F```73@``%WH``!N````;R```E
  835. M!A(```9@```&?````IH```*H```#`````P8```,N```#=````Y@```04```$Q
  836. M.```!(H```4@```!8`````(````(````#@```!H```!&````3````%X```!D2
  837. M````W@```.X```#\```!`@```0X```$4```!&@```2````$N```!/@```5``J
  838. M``%T```!A@```8P```&2```!F````9X```&D```!R@```=(```':```!Y```7
  839. M`?(```(````"#@```AP```(H```";@```-`````"```B-```(4H``"$F```@W
  840. MY```(,0``"!J```@1```'_H``!_D```@3@``'PX``!\@```?.```'U```!]HY
  841. M```??@``'Y```!^V```?Q@``'KP``!Z$```>L```'CX``!WZ```=@```';``M
  842. M`!UB```=)```'<(``!T6```=/@``'6X``!V>```=N@``&[(``!P&```71```4
  843. M&OX``!NB```;]@``$;H``!,H```5!@``$9@``!3D```6E@``%W(``!$\```4^
  844. M*```$2@``!(8```4%```%60``!#\```1Z@``$VX``!/H```5-@``$,@``!%>!
  845. M```2#```$[0``!1*```56```$*0``!$:```1Q```$Y```!0&```5$```$(8`<
  846. M`!+&```5]@``$&```!)0```2G@``$NP``!,*```34```%9P``!7>```6*@``'
  847. M%D@``!`$```4M```#_0``!28```/@@``&`H``!DN```/A@``#XX```^6```/)
  848. MH@``#Z@```^X```/P@``#\P``!!.```0Z@``$:@``!'8```2/@``$HP``!+:@
  849. M```2^```$Q8``!,^```37```$]8``!3T```5)```%8H``!7,```6&```%C8`7
  850. M`!9B```6@@``%ZH``!?*```7[```&`X``!@:```9,@``&3H``!E"```92@``I
  851. M&5(``!E:```98@``&6H``!ER```9>@``&8(``!F*```9E@``&?```!H4```:X
  852. M.```&G8``!KT```;&```&V@``!N2```;V@``"=X```?B```'O```"]P```4N;
  853. M```$N@``!.8```4^```#4````I0```*V```"T````O(```-$```#A@```Z8`+
  854. M``1N```$I```!0@```=4```'M@``!^@```BD```(K@``"+(```BV```(N@``*
  855. M"+X```C"```(Q@``",H```C.```(T@``"-8```C:```(W@``".(```CF```(F
  856. MZ@``".X```CR```(]@``">(```GJ```)\@``"?X```IZ```+X@``"^P```OVA
  857. M```,````#`H```P4```,'@``#"@```PR```,/```#$8```Q0```,6@``#&0`J
  858. M``$F```!O`````8````#```BJ```(HX``"(````A`@```0@```#V````$P``^
  859. M``0``"'>```A&```(+0```;(```&U@``!CX```:8```&#```!EH```7T```&-
  860. MX```!8H```:^```#S@```[P```1,```"U@```O@```*.````!`````4```6TW
  861. M```%Z@``!"P```1>`````@````8```>H```$!@````````/R```#Z0```!9(!
  862. MYS`"3.\`#@`0+'D````(3J[_T$S?0`Q.=0``+PXL>0````A.KO_*+%].=2\.>
  863. M+'D````(3J[_Q"Q?3G5(YS`"3.\`#@`0+'D````(3J[_ODS?0`Q.=0`````#7
  864. M[`````0````!````2````#`````@````#`````````/P`````E]3965K````Q
  865. M````/`````)?3W5T<'5T`````"P````"7TEN<'5T```````<`````E]7<FETN
  866. M90````````````````/R```#Z0```#8O#BQY````!$ZN_X@L7TYU+PXL>0``5
  867. M``1.KO^"+%].=2\.+'D````$3J[_?"Q?3G4O#BQY````!$ZN_W8L7TYU+PXL(
  868. M>0````1,[P`#``A.KO\Z+%].=0``+PXL>0````0B;P`(("\`#$ZN_RXL7TYU7
  869. M+PXL>0````0B+P`(3J[_*"Q?3G4O#BQY````!"!O``A.KOZ,+%].=2\.+'D`C
  870. M```$(F\`"$ZN_H8L7TYU+PXL>0````0B;P`(3J[^8BQ?3G4O#BQY````!")O+
  871. M``@@+P`,3J[]V"Q?3G4```/L````"P````$```#$````L````)P```"(````5
  872. M=````%P```!$````-````"0````4````!`````````/P`````U]/<&5N3&EB"
  873. M<F%R>0```,`````$7T-L;W-E3&EB<F%R>0```````*P````#7U)E<&QY37-GM
  874. M````````F`````)?1V5T37-G`````(0````#7T%V86EL365M````````<```B
  875. M``)?1G)E94UE;0```%@````#7T%L;&]C365M````````0`````)?4&5R;6ET8
  876. M`````#`````"7T9O<F)I9``````@`````E]%;F%B;&4`````$`````)?1&ES`
  877. M86)L90`````````````#\@```^D````,+PXL>0```>Q.KO[R+%].=4CG,`(@+
  878. M;P`03.\`#P`4+'D```'L3J[^X$S?0`Q.=0`````#[`````(````!````(```5
  879. M``0````````#\`````)?4V5T4D="-````!`````"7U=A:7143T8`````````"
  880. M`````_(```/I````"B\.+'D```'H(&\`"$ZN_[@L7TYU+PXL>0```>@@;P`(P
  881. M3J[_-"Q?3G4```/L`````@````$````8````!`````````/P`````U]/<&5NR
  882. G5VEN9&]W`````!0````#7T-L;W-E5VEN9&]W``````````````/R1
  883. ``
  884. end
  885. size 14304
  886. SHAR_EOF
  887. #    End of shell archive
  888. exit 0
  889. -- 
  890. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  891. Have five nice days.
  892.